package com.plian.system.service.hr.recruitment.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.plian.Tools.CollectionUtil;
import com.plian.system.entity.hr.recruitment.PartTimeInfo;
import com.plian.system.enumeratea.PartTimeStatus;
import com.plian.system.mapper.hr.recruitment.PartTimeInfoMapper;
import com.plian.system.mybatis.base.BaseServiceImpl;
import com.plian.system.service.hr.recruitment.IPartTimeInfoService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * 招聘管理子表 服务实现类
 *
 * @author gangan
 * @since 2019-11-15
 */
@Slf4j
@Service
@AllArgsConstructor
public class PartTimeInfoServiceImpl extends BaseServiceImpl<PartTimeInfoMapper, PartTimeInfo> implements IPartTimeInfoService {


    @Override
    public String getPartTimeJobSituation(Long id) {
        String result = "";
        if (!Optional.ofNullable(id).isPresent()){
            return result;
        }

        List<PartTimeInfo> partTimeInfos = getPartTimeInfos(id);
        if (CollectionUtil.isNotEmpty(partTimeInfos)){
            for (PartTimeInfo partTimeInfo : partTimeInfos){
                if (!"".equals(result)){
                    result += ", ";
                }
                result += partTimeInfo.getPartTimeEnterpriseName() + partTimeInfo.getProposedConcurrentPost();

            }
        }
        return result;
    }

    @Override
    public List<PartTimeInfo> getPartTimeInfosByStatus(Long id, int status) {
        LambdaQueryWrapper<PartTimeInfo> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(PartTimeInfo::getStaffNameId, id);
        queryWrapper.eq(PartTimeInfo::getStatus, status);
        return list(queryWrapper);
    }

    @Override
    public List<PartTimeInfo> getPartTimeInfos(Long id) {
        LambdaQueryWrapper<PartTimeInfo> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(PartTimeInfo::getStaffNameId, id);
        List<Integer> statusList = new ArrayList<>();
        statusList.add(PartTimeStatus.INCUMBENCY.getStatus());
        statusList.add(PartTimeStatus.REMOVAL_AUDIT.getStatus());
        queryWrapper.in(PartTimeInfo::getStatus, statusList);
        return list(queryWrapper);
    }

    @Override
    public boolean changeStatus(Long partTimeManagementId, int updateStatus) {
        LambdaUpdateWrapper<PartTimeInfo> updateWrapper = new LambdaUpdateWrapper<>();
		return update(updateWrapper.eq(PartTimeInfo::getPartTimeManagementId, partTimeManagementId).set(PartTimeInfo::getStatus, updateStatus));
    }

    @Override
    public boolean changeStatusByRemove(List<Long> partTimeInfoIds, int updateStatus) {
        LambdaUpdateWrapper<PartTimeInfo> updateWrapper = new LambdaUpdateWrapper<>();
        return update(updateWrapper.in(PartTimeInfo::getId, partTimeInfoIds).set(PartTimeInfo::getStatus, updateStatus));
    }

    @Override
    public boolean changeStatusById(Long id, int updateStatus) {
        LambdaUpdateWrapper<PartTimeInfo> updateWrapper = new LambdaUpdateWrapper<>();
        return update(updateWrapper.eq(PartTimeInfo::getId, id).set(PartTimeInfo::getStatus, updateStatus));
    }

    @Override
    public Boolean deleteLogicPartTimeManagementId(List<Long> ids) {
        LambdaUpdateWrapper<PartTimeInfo> queryWrapper = new LambdaUpdateWrapper<>();
        queryWrapper.in(PartTimeInfo::getPartTimeManagementId, ids);
        List<PartTimeInfo> partTimeInfos = list(queryWrapper);
        if (CollectionUtil.isNotEmpty(partTimeInfos)){
            return deleteLogic(partTimeInfos.stream().map(PartTimeInfo::getId).collect(Collectors.toList()));
        }
        return true;
    }

    @Override
    public String getPartTimeJobSituation(List<Long> ids) {
        String result = "";
        if (CollectionUtil.isEmpty(ids)){
            return result;
        }

        List<PartTimeInfo> partTimeInfos = getPartTimeInfos(ids);
        if (CollectionUtil.isNotEmpty(partTimeInfos)){
            for (PartTimeInfo partTimeInfo : partTimeInfos){
                if (!"".equals(result)){
                    result += ", ";
                }
                result += partTimeInfo.getPartTimeEnterpriseName() + partTimeInfo.getProposedConcurrentPost();

            }
        }
        return result;
    }


    @Override
    public List<PartTimeInfo> getPartTimeInfos(List<Long> ids) {
        LambdaQueryWrapper<PartTimeInfo> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(PartTimeInfo::getStaffNameId, ids);
        List<Integer> statusList = new ArrayList<>();
        statusList.add(PartTimeStatus.INCUMBENCY.getStatus());
        statusList.add(PartTimeStatus.REMOVAL_AUDIT.getStatus());
        queryWrapper.in(PartTimeInfo::getStatus, statusList);
        return list(queryWrapper);
    }

}
